#Mateus Sousa, exercicios 108.1 a 108.2

#108.1
#lendo os dados
eutad=read.table("palmadulto.txt", header=TRUE, as.is=TRUE, sep="\t")
#crianod o objeto para guardar as distancias entre cada individuo
dist=matrix(NA, ncol=102, nrow=102)
#calculando as distancias
for(i in 1:101)
{
    for(j in (i+1):102)
    {
     difx2=(eutad$gx[i]-eutad$gx[j])^2
     dify2=(eutad$gy[i]-eutad$gy[j])^2
     dist[i,j]<-sqrt(difx2 + dify2)
     dist[j,i]<-sqrt(difx2 + dify2)
      }
  }

#calcular a mean nearest neightbor esperada
nn=apply(dist, 1, min, na.rm=TRUE)
mnn=mean(nn)
#vamaeh!
resultado<-rep(NA, 1000)
resultado[1]=mnn
for(k in 2:1000)
  {
    xsim<-runif(n=102, min=0, max=320)
    ysim<-runif(n=102, min=0, max=320)

    dist_sim=matrix(NA, ncol=102, nrow=102)
    #calculando as distancias
    for(i in 1:101)
    {
      for(j in (i+1):102)
      {
        dif_repx2=(xsim[i]-xsim[j])^2
        dif_repy2=(ysim[i]-ysim[j])^2
        dist_sim[i,j]=dist_sim[j,i]=sqrt(dif_repx2 + dif_repy2)
        
      }
    }
    
    nn_re=apply(dist_sim, 1, min, na.rm=TRUE)
    mnn_re=mean(nn_re)
    resultado[k]=mnn_re
}
hist(resultado)
segments(x0=resultado[1], x1=resultado[1], y0=0, y1=200, col="red")

p.resultado=sum(resultado<=resultado[1])/length(resultado)
#A probabilidade do MNN observado ser gerado por uma distribuicao espacial aleatoria e p=0.027 


#---------------

#108.2

#lendo os dados
brains<-read.table("brains.txt", header=TRUE, as.is=TRUE, sep=";", dec=",")
#tirando os NAs
brains=na.omit(brains)
#calculando a inclinacao da reta observada
slope_brains<-cov(log(brains$brain), log(brains$body))/var(log(brains$body))
#criando um vetor para guardar as simulacoes
resultado=rep(NA, 100000)
#simulando
for(i in 1:100000)
  {
    sim_brains=brains
      sim_brains$brain=sample(sim_brains$brain)
    resultado[i]<-cov(log(sim_brains$brain), 
                      log(sim_brains$body))/var(log(sim_brains$body))
  }
hist(resultado)
#plotando o observaod no grafico
segments(x0=slope_brains, x1=slope_brains, y0=0, y1=500)
#nao da pra ver o segmento!!
#os valores simulados sao muito menores que o valor observado da inclinacao da relacao
p_slope=sum(resultado>=slope_brains)/length(resultado)
p_slope
# A probabilidade da inclinacao observada ter sido gerada pr avriaveis que sao independentes e menor que 0.001
